package com.aura.lyngen.common;

import com.aura.lyngen.exception.ErrorCode;
import lombok.Data;

import java.io.Serializable;


/**
 * 通用基础响应类，用于封装API接口的返回结果
 * 使用泛型设计，可以支持不同类型的数据返回
 * 实现Serializable接口，支持序列化操作
 *
 * @param <T> 泛型类型，表示返回数据的类型
 */
@Data
public class BaseResponse<T> implements Serializable {

    /**
     * 响应状态码
     * 用于表示接口调用的成功或失败状态
     */
    private int code;

    /**
     * 响应数据
     * 用于存储接口返回的具体业务数据
     */
    private T data;

    /**
     * 响应消息
     * 用于描述接口调用的结果信息
     */
    private String message;

    /**
     * 全参构造方法
     *
     * @param code    响应状态码
     * @param data    响应数据
     * @param message 响应消息
     */
    public BaseResponse(int code, T data, String message) {
        this.code = code;
        this.data = data;
        this.message = message;
    }

    /**
     * 部分参数构造方法
     * 当不需要返回消息时使用，消息默认为空字符串
     *
     * @param code 响应状态码
     * @param data 响应数据
     */
    public BaseResponse(int code, T data) {
        this(code, data, "");
    }

    /**
     * 使用错误码构造响应对象
     * 当接口调用失败时使用，自动填充错误码和错误信息
     */
    public BaseResponse(ErrorCode errorCode) {
        this(errorCode.getCode(), null, errorCode.getMessage());
    }
}
